package ar.uba.fi.taller2.cmmiassistant.frontend.evaluacion.editorescalificacion;

import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;

import ar.uba.fi.taller2.cmmiassistant.controlador.Controlador;
import ar.uba.fi.taller2.cmmiassistant.frontend.evaluacion.EditorCalificacion;
import ar.uba.fi.taller2.cmmiassistant.frontend.evaluacion.util.AreaProcesoConversorEvaluables;
import ar.uba.fi.taller2.cmmiassistant.frontend.util.ItemToEvaluateAreaProcesoEditor;
import ar.uba.fi.taller2.cmmiassistant.modelo.aplicacion.Seleccion;
import ar.uba.fi.taller2.cmmiassistant.modelo.cmmi.AreaProceso;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Evaluacion;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Instancia;
import ar.uba.fi.taller2.cmmiassistant.observador.Observable;
import ar.uba.fi.taller2.cmmiassistant.observador.Observador;
import ar.uba.fi.taller2.cmmiassistant.observador.ServicioNotificacion;
import ar.uba.fi.taller2.cmmiassistant.vista.Estado;
import ar.uba.fi.taller2.cmmiassistant.vista.Vista;

public class EditorCalificacionAreasDeProceso extends EditorCalificacion {

	public EditorCalificacionAreasDeProceso(Vista contexto) {
		super(contexto, new AreaProcesoConversorEvaluables());
	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 5931991175452971827L;

	@Override
	public Collection<?> getItems() {
		Evaluacion evaluacionSeleccionada = getControlador().getModelo()
				.getEvaluacionSeleccionada().getValor();
		if (evaluacionSeleccionada != null
				&& evaluacionSeleccionada.getRepresentacion() != null
				&& evaluacionSeleccionada.getRepresentacion().getAreasProceso() != null) {
				return evaluacionSeleccionada.getRepresentacion().getAreasProceso();
		}
		return Collections.EMPTY_SET;
	}

	@Override
	public Estado getEstado() {
		return Estado.EDITANDO_EVALUACION_AREAS_PROCESO;
	}

	@Override
	public void cargar() {
//		super.cargar();
		this.inicializar();
		for (Iterator<?> iter = getItems().iterator(); iter.hasNext();) {
			AreaProceso etiqueta = (AreaProceso) iter.next();
			this.add(new ItemToEvaluateAreaProcesoEditor(etiqueta, this
					.getConversor(), getControlador()));
		}
	}

	@Override
	public void setControlador(Controlador controlador) {
		super.setControlador(controlador);
		Seleccion<Evaluacion> seleccion = this.getModelo()
				.getEvaluacionSeleccionada();
		Seleccion<Instancia> seleccionInstancia = this.getModelo()
			.getInstanciaSeleccionada();		
		ServicioNotificacion.addObservador(seleccion, this.observadorModelo);
		ServicioNotificacion.addObservador(seleccionInstancia, this.observadorModelo);
		cargar();

	}

	private final Observador observadorModelo = new Observador() {

		public void cambio(Observable entidad) {

			EditorCalificacionAreasDeProceso.this.cargar();
		}
	};
}
